<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
   
      <title>Cap&iacute;tulo 1. Empezando con gvHIDRA</title>
      <meta name="generator" content="DocBook XSL-NS Stylesheets V1.75.2">
      <link rel="home" href="indice.html" title="Manual Usuario gvHidra">
      <link rel="up" href="Parte_1.html" title="Parte&nbsp;I.&nbsp;Empezando con gvHidra">
      <link rel="prev" href="Parte_1.html" title="Parte&nbsp;I.&nbsp;Empezando con gvHidra">
      <link rel="next" href="ch01s02.html" title="1.2. Requerimientos">
   </head>
   <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
      <div class="navheader">
         <table width="100%" summary="Navigation header">
            <tr>
               <th colspan="3" align="center">Cap&iacute;tulo 1. Empezando con gvHIDRA</th>
            </tr>
            <tr>
               <td width="20%" align="left"><a accesskey="p" href="Parte_1.html">Anterior</a>&nbsp;
               </td>
               <th width="60%" align="center">Parte&nbsp;I.&nbsp;Empezando con gvHidra</th>
               <td width="20%" align="right">&nbsp;<a accesskey="n" href="ch01s02.html">Siguiente</a></td>
            </tr>
         </table>
         <hr>
      </div>
      <div class="chapter" title="Cap&iacute;tulo 1. Empezando con gvHIDRA">
         <div class="titlepage">
            <div>
               <div>
                  <h2 class="title"><a name="d4e10"></a>Cap&iacute;tulo 1. Empezando con gvHIDRA
                  </h2>
               </div>
            </div>
         </div>
         <div class="toc">
            <p><b>Tabla de contenidos</b></p>
            <dl>
               <dt><span class="section"><a href="ch01.html#d4e12">1.1. Introducci&oacute;n</a></span></dt>
               <dd>
                  <dl>
                     <dt><span class="section"><a href="ch01.html#d4e15">1.1.1. Acerca de este documento</a></span></dt>
                     <dt><span class="section"><a href="ch01.html#d4e26">1.1.2. &iquest;Qu&eacute; es gvHIDRA?</a></span></dt>
                     <dt><span class="section"><a href="ch01.html#d4e111">1.1.3. Versiones</a></span></dt>
                  </dl>
               </dd>
               <dt><span class="section"><a href="ch01s02.html">1.2. Requerimientos</a></span></dt>
               <dd>
                  <dl>
                     <dt><span class="section"><a href="ch01s02.html#d4e122">1.2.1. Hardware</a></span></dt>
                     <dt><span class="section"><a href="ch01s02.html#d4e132">1.2.2. Software</a></span></dt>
                  </dl>
               </dd>
               <dt><span class="section"><a href="ch01s03.html">1.3. Entendiendo el entorno</a></span></dt>
               <dt><span class="section"><a href="ch01s04.html">1.4. Instalaci&oacute;n del entorno</a></span></dt>
               <dd>
                  <dl>
                     <dt><span class="section"><a href="ch01s04.html#d4e208">1.4.1. &iquest;El entorno funciona correctamente?</a></span></dt>
                  </dl>
               </dd>
               <dt><span class="section"><a href="ch01s05.html">1.5. Creando mi &#8220;hola mundo&#8221; en gvHidra</a></span></dt>
            </dl>
         </div>
           
         
           
         <div class="section" title="1.1. Introducci&oacute;n">
            <div class="titlepage">
               <div>
                  <div>
                     <h2 class="title" style="clear: both"><a name="d4e12"></a>1.1. Introducci&oacute;n
                     </h2>
                  </div>
               </div>
            </div>
                
            
                
            <p></p>
            
                
            <div class="section" title="1.1.1. Acerca de este documento">
               <div class="titlepage">
                  <div>
                     <div>
                        <h3 class="title"><a name="d4e15"></a>1.1.1. Acerca de este documento
                        </h3>
                     </div>
                  </div>
               </div>
                     
               
                     
               <p>Este documento pretende ser un punto de referencia para todo aquel
                        que se vaya a embarcar en el desarrollo de aplicaciones basadas en el
                        <span class="emphasis"><em>framework</em></span> gvHidra.
               </p>
               
                     
               <p>A lo largo de los diferentes cap&iacute;tulos, se van a ir mostrando las
                        posibilidades del <span class="emphasis"><em>framework</em></span>, las mejoras que aporta
                        frente a otras opciones y, por supuesto, como instalar y ejecutar una
                        primera aplicaci&oacute;n basica. Con todo ello, se tendr&aacute; preparado un entorno
                        de trabajo funcional para poder ir desarrollando y practicando los
                        conceptos adquiridos a lo largo de este manual.
               </p>
               
                     
               <p>Este manual ha sido desarrollado por el equipo de gvHIDRA para
                        favorecer y agilizar el acceso a cualquier usuario novel o avanzado en
                        el desarrollo de aplicaciones basadas en este mismo
                        <span class="emphasis"><em>framework</em></span>.
               </p>
               
                     
               <p>Complementariamente existe una lista de distribuci&oacute;n
                        [http://listserv.gva.es/cgi-bin/mailman/listinfo/gvhidra_soporte] a la
                        que cualquier desarrollador puede suscribirse y hacer llegar sus
                        peticiones de ayuda o sugerencias para mejorar la herramienta.
               </p>
               
                     
               <p>Por otro lado existen unos servicios de archivo que permiten
                        realizar b&uacute;squedas en el hist&oacute;rico de mensajes de la lista simulando el
                        funcionamiento tipo "foro". Se puede acceder a las listas de gvHIDRA
                        desde la interfaz de <a class="ulink" href="http://gvhidra.3754916.n2.nabble.com" target="_top">nabble</a>, obtener
                        or&iacute;genes RSS e incluso escribir a la lista.
               </p>
                   
            </div>
            
                
            <div class="section" title="1.1.2. &iquest;Qu&eacute; es gvHIDRA?">
               <div class="titlepage">
                  <div>
                     <div>
                        <h3 class="title"><a name="d4e26"></a>1.1.2. &iquest;Qu&eacute; es gvHIDRA?
                        </h3>
                     </div>
                  </div>
               </div>
                     
               
                     
               <p>gvHidra son las iniciales de <span class="bold"><strong>G</strong></span>eneralitat <span class="bold"><strong>V</strong></span>alenciana: <span class="bold"><strong>H</strong></span>erramienta <span class="bold"><strong>I</strong></span>ntegral de <span class="bold"><strong>D</strong></span>esarrollo <span class="bold"><strong>R</strong></span>&aacute;pido de <span class="bold"><strong>A</strong></span>plicaciones.
               </p>
               
                     
               <p>Si hay que dar una explicaci&oacute;n r&aacute;pida de qu&eacute; es este proyecto,
                        podemos decir que se trata de un entorno de trabajo
                        (<span class="emphasis"><em>framework</em></span>) para el desarrollo de aplicaciones de
                        gesti&oacute;n en entornos web con PHP siguiendo una gu&iacute;a de estilo (una gu&iacute;a
                        para unificar los criterios de aspecto y usabilidad en el proceso de
                        desarrollo de aplicaciones).
               </p>
               
                     
               <p>Evidentemente, esto no responde a la pregunta que da t&iacute;tulo a este
                        punto. Por ello, vamos a explicar las motivaciones que nos llevaron a su
                        creaci&oacute;n y las caracter&iacute;sticas que cubre.
               </p>
               
                     
               <div class="section" title="1.1.2.1. Un poco de historia">
                  <div class="titlepage">
                     <div>
                        <div>
                           <h4 class="title"><a name="d4e39"></a>1.1.2.1. Un poco de historia
                           </h4>
                        </div>
                     </div>
                  </div>
                          
                  
                          
                  <p>El Servicio de Organizaci&oacute;n e Inform&aacute;tica (SOI) de la
                             Conselleria de Infraestructuras y Transporte de la Generalitat
                             Valenciana (CIT) ha trabajado tradicionalmente con la premisa de
                             aumentar la productividad en base a entornos de trabajo que facilitan
                             el desarrollo de aplicaciones. Concretamente, una de sus l&iacute;neas de
                             desarrollo, utilizaba unas plantillas en PowerBuilder que, en una
                             arquitectura cliente servidor, reduc&iacute;an los tiempos de desarrollos
                             resolviendo la parte general del problema.
                  </p>
                  
                          
                  <p>Dentro de este marco, la CIT emprendi&oacute; el proyecto gvPONTIS cuyo
                             objetivo principal era migrar todos los sistemas a sistemas de c&oacute;digo
                             abierto. Entre otras facetas afectadas se encontraban los lenguajes de
                             programaci&oacute;n (se seleccionaron PHP y Java), los SGBD (se decidi&oacute;
                             fomentar el uso de Postgresql), la arquitectura (pasar al desarrollo
                             web/tres capas)...
                  </p>
                  
                          
                  <p>Con todo ello, se decidi&oacute; crear un proyecto en PHP que,
                             bas&aacute;ndose en la gu&iacute;a de estilo de las aplicaciones de la CIT, aportara
                             las mismas ventajas que las anteriores plantillas de PowerBuilder:
                             aumentar la productiva de nuestros desarrollos.
                  </p>
                  
                          
                  <p>Pero claro, a todos esos requerimientos, ten&iacute;amos que a&ntilde;adir las
                             dificultades que generaba el nuevo &aacute;mbito de trabajo: el entorno web
                             (HTML, Javacript,...), el enfoque OpenSource, ... Por tanto se decidi&oacute;
                             incorporar como requerimiento la simplificaci&oacute;n del entorno de trabajo
                             para un desarrollador.
                  </p>
                  
                          
                  <p>Con todo ello se cre&oacute; un proyecto (igep: Implementaci&oacute;n de la
                             Gu&iacute;a de Estilo en Php) que compon&iacute;a el core del framework cuya primera
                             versi&oacute;n estable sali&oacute; el 16-11-2004. Este proyecto, al ser liberado
                             con licencia GPL tom&oacute; la denominaci&oacute;n gvHIDRA. A partir de este hito,
                             empezaron a colaborar con el proyecto numerosas entidades p&uacute;blicas y
                             privadas que nos ayudan a mantener el proyecto vivo y
                             actualizado.
                  </p>
                        
               </div>
               
                     
               <div class="section" title="1.1.2.2. Pero &iquest;Qu&eacute; es gvHIDRA?">
                  <div class="titlepage">
                     <div>
                        <div>
                           <h4 class="title"><a name="d4e46"></a>1.1.2.2. Pero &iquest;Qu&eacute; es gvHIDRA?
                           </h4>
                        </div>
                     </div>
                  </div>
                          
                  
                          
                  <p>Con lo expuesto en el punto anterior, quedan claras las premisas
                             que nos movieron a plantearnos la creaci&oacute;n de este proyecto pero,
                             &iquest;C&oacute;mo hemos logrado unos objetivos tan ambiciosos? Bien, es dificil
                             afirmar que los hemos alcanzado todos, pero creemos que buena parte de
                             ellos quedan resueltos en el proyecto con las siguientes
                             caracter&iacute;sticas del <span class="emphasis"><em>framework</em></span>:
                  </p>
                  
                          
                  <div class="itemizedlist">
                     <ul class="itemizedlist" type="disc">
                        <li class="listitem">
                                       
                           <p>
                                            <span class="bold"><strong>Patrones de interfaz</strong></span>
                                          
                           </p>
                           
                                       
                           <p>Una de las tareas m&aacute;s costosas es en la definici&oacute;n de la
                                          interfaz con el usuario. Para facilitar el trabajo, se han
                                          definido una serie de patrones de b&aacute;sicos. Estos patrones definen
                                          la forma de representaci&oacute;n de la informaci&oacute;n (formato tabular,
                                          registro,...) y la forma con la que interacciona el usuario con
                                          dicha informaci&oacute;n. Esto nos lleva a que con la selecci&oacute;n de un
                                          patr&oacute;n obtenemos el dise&ntilde;o global de la ventana.
                           </p>
                           
                                       
                           <div class="mediaobject" align="center"><img src="images/ejemploPatronesInterfaz.png" align="middle"></div>
                           
                                       
                           <p>Ejemplos de patr&oacute;n simple tabular, maestro detalle y
                                          &aacute;rbol.
                           </p>
                                     
                        </li>
                        <li class="listitem">
                                       
                           <p>
                                            <span class="bold"><strong>Componentes complejos</strong></span>
                                          
                           </p>
                           
                                       
                           <p>La experiencia acumulada nos dice que todas las aplicaciones
                                          necesitan de una serie de componentes &#8220;complejos&#8221;. Ventanas de
                                          selecci&oacute;n (en PowerBuilder listas de valores), listas enlazadas,
                                          acciones de interfaz (en WEB tec. AJAX), mensajes de
                                          informaci&oacute;n,... El <span class="emphasis"><em>framework</em></span> genera estos
                                          componentes simplificando su utilizaci&oacute;n en las
                                          aplicaciones.
                           </p>
                           
                                       
                           <div class="mediaobject" align="center"><img src="images/ejemploComponentesComplejos.png" align="middle"></div>
                                     
                        </li>
                        <li class="listitem">
                                       
                           <p>
                                            <span class="bold"><strong>Operaciones preprogramadas y
                                                  parametrizables</strong></span>
                                          
                           </p>
                           
                                       
                           <p>Al igual que con los componentes, hemos advertido que cierta
                                          problem&aacute;tica se repite en todas las aplicaciones que
                                          desarrollamos. Por esa raz&oacute;n, la hemos generalizado y resuelto en
                                          el <span class="emphasis"><em>framework</em></span>, siendo incorporada a las
                                          aplicaciones de forma transparente. Algunos ejemplos son:
                           </p>
                           
                                       
                           <div class="itemizedlist">
                              <ul class="itemizedlist" type="circle">
                                 <li class="listitem">Control de acceso concurrente: es importante que el
                                                  garantizar la integridad de los cambios realizados por ello el
                                                  <span class="emphasis"><em>framework</em></span> incorpora de forma transparente
                                                  un mecanismo de control.
                                 </li>
                                 <li class="listitem">CRUD: el <span class="emphasis"><em>framework</em></span> genera las
                                                  sentencias SQL necesarias para Crear, Leer, Actualizar y Borrar
                                                  un registro.
                                 </li>
                                 <li class="listitem">Persistencia y validaci&oacute;n de tipos: completando lo que
                                                  nos ofrece el PHP, el <span class="emphasis"><em>framework</em></span> incorpora
                                                  objectos persistentes y validaci&oacute;n de tipos de datos.
                                 </li>
                              </ul>
                           </div>
                                     
                        </li>
                        <li class="listitem">
                                       
                           <p>
                                            <span class="bold"><strong>Soporte a diferentes SGBD</strong></span>
                                          
                           </p>
                           
                                       
                           <p>A trav&eacute;s del proyecto PEAR::MDB2, el
                                          <span class="emphasis"><em>framework</em></span> permite trabajar con diversos SGBD.
                                          Adem&aacute;s, incorpora un capa de intermedia propia del
                                          <span class="emphasis"><em>framework</em></span> que nos permite independizarnos de
                                          las diferentes interpretaciones del SQL que hace cada gestor
                                          (definici&oacute;n de l&iacute;mites, transacciones, ...).
                           </p>
                                     
                        </li>
                        <li class="listitem">
                                       
                           <p>
                                            <span class="bold"><strong>Listados e informes</strong></span>
                                          
                           </p>
                           
                                       
                           <p>Uno de los mayores retos que hemos encontrado en el &aacute;mbito
                                          del proyecto fue generar informes de forma tan versatil como los
                                          datawindows de PowerBuilder. Gracias al proyecto jasperreports lo
                                          hemos conseguido. Apoyados por herramientas como el iReport,
                                          conseguimos listados e informes muy completos y en diferentes
                                          formatos.
                           </p>
                                     
                        </li>
                        <li class="listitem">
                                       
                           <p>
                                            <span class="bold"><strong>Arquitectura MVC</strong></span>
                                          
                           </p>
                           
                                       
                           <p>El <span class="emphasis"><em>framework</em></span> garantiza la arquitectura
                                          MVC en todos nuestros desarrollos forzando la separaci&oacute;n de la
                                          l&oacute;gica de negocio de la presentaci&oacute;n mediante la distribuci&oacute;n
                                          f&iacute;sica de los ficheros fija.
                           </p>
                                     
                        </li>
                        <li class="listitem">
                                       
                           <p>
                                            <span class="bold"><strong>Control de la vista</strong></span>
                                          
                           </p>
                           
                                       
                           <p>Como hemos comentado, uno de los objectivos principales de
                                          la herramienta es simplificar la labor del programador. Con esta
                                          premisa, hemos conseguido que un desarrollador de gvHIDRA realice
                                          una aplicaci&oacute;n WEB sin necesidad de introducir ninguna l&iacute;nea de
                                          HTML o Javascript. La idea es que centre su trabajo &uacute;nicamente en
                                          PHP, siendo as&iacute; mucho m&aacute;s productivo.
                           </p>
                                     
                        </li>
                        <li class="listitem">
                                       
                           <p>
                                            <span class="bold"><strong>Custom y temas</strong></span>
                                          
                           </p>
                           
                                       
                           <p>La herramienta est&aacute; pensada para su despliegue en diferentes
                                          organizaciones, por ello, se distribuye en una arquitectura
                                          App/Custom/Core que permite modificar tanto el aspectos (CSS,
                                          im&aacute;genes, ...) como definir comportamientos propios de la
                                          organizaci&oacute;n.
                           </p>
                                     
                        </li>
                        <li class="listitem">
                                       
                           <p>
                                            <span class="bold"><strong>Testing</strong></span>
                                          
                           </p>
                           
                                       
                           <p>Incorpora la herramienta PHPUnit para que se puedan realizar
                                          testeos sobre el c&oacute;digo generado. Tambi&eacute;n se incorporan consejos y
                                          reglas para poder realizar test autom&aacute;ticos son Selenium.
                           </p>
                                     
                        </li>
                        <li class="listitem">
                                       
                           <p>
                                            <span class="bold"><strong>Autentificaci&oacute;n, auditor&iacute;a y
                                                  depuraci&oacute;n</strong></span>
                                          
                           </p>
                           
                                       
                           <p>Para poder incorporarse en diferentes organismos incorpora
                                          un mecanismo de validaci&oacute;n extensible siendo capaz de acloplarse a
                                          cualquier sistema de validaci&oacute;n a trav&eacute;s de PHP. Dispone de
                                          herramientas para reliazar auditor&iacute;as y depuraci&oacute;n.
                           </p>
                                     
                        </li>
                     </ul>
                  </div>
                        
               </div>
                   
            </div>
            
                
            <p>Como buen proyecto opensource, el proyecto siguen en constante
                   evoluci&oacute;n incorporando nuevas funcionalidades que nos permitan, ante todo,
                   ser m&aacute;s productivos.
            </p>
            
                
            <div class="section" title="1.1.3. Versiones">
               <div class="titlepage">
                  <div>
                     <div>
                        <h3 class="title"><a name="d4e111"></a>1.1.3. Versiones
                        </h3>
                     </div>
                  </div>
               </div>
                     
               
                     
               <p>Desde su liberaci&oacute;n, el xx-xx-2xxx, gvHIDRA ha seguido una
                        estrategia de versiones con el fin de incorporar nuevas funcionalidades
                        y resolver errores siendo la versi&oacute;n actual la 3.1.0 (rama 3.1.x). La
                        numeraci&oacute;n de las versiones corresponde al siguiente patr&oacute;n: x.y.z Un
                        cambio en el &uacute;ltimo n&uacute;mero (z) implica correcci&oacute;n de errores/bugs, en
                        este caso ser&aacute; invisible el cambio de versi&oacute;n en lo desarrollado a
                        partir del framework. Si el cambio es en el segundo n&uacute;mero (y), implica
                        una mejora del framework o la adici&oacute;n de una nueva funcionalidad, esto
                        s&iacute; puede provocar alg&uacute;n cambio en la programaci&oacute;n de lo desarrollado a
                        partir del framework. Por &uacute;ltimo, el cambio del primer n&uacute;mero (x) s&iacute; que
                        lleva una gran mejora en el framework o una nueva funcionalidad
                        importante.
               </p>
               
                     
               <p><span class="emphasis"><em>Recomendaciones</em></span>:
               </p>
               
                     
               <div class="itemizedlist">
                  <ul class="itemizedlist" type="disc">
                     <li class="listitem">
                                  
                        <p>Trabajar siempre en la versi&oacute;n m&aacute;s reciente posible, para
                                     facilitar la resoluci&oacute;n de errores, evitar usar una versi&oacute;n
                                     correspondiente a una rama no activa. Esto no significa que se
                                     descarten problemas de versiones anteriores, sino que si la soluci&oacute;n
                                     implica cambios, &eacute;stos no se publicar&aacute;n en ramas no activas.
                        </p>
                                
                     </li>
                  </ul>
               </div>
                   
            </div>
              
         </div>
         
           
         
           
         
           
         
           
         
      </div>
      <div class="navfooter">
         <hr>
         <table width="100%" summary="Navigation footer">
            <tr>
               <td width="40%" align="left"><a accesskey="p" href="Parte_1.html">Anterior</a>&nbsp;
               </td>
               <td width="20%" align="center"><a accesskey="u" href="Parte_1.html">Subir</a></td>
               <td width="40%" align="right">&nbsp;<a accesskey="n" href="ch01s02.html">Siguiente</a></td>
            </tr>
            <tr>
               <td width="40%" align="left" valign="top">Parte&nbsp;I.&nbsp;Empezando con gvHidra&nbsp;</td>
               <td width="20%" align="center"><a accesskey="h" href="indice.html">Inicio</a></td>
               <td width="40%" align="right" valign="top">&nbsp;1.2. Requerimientos</td>
            </tr>
         </table>
      </div>
   </body>
</html>